/*
 * Copyright (c) 2007-2020 西安交通信息投资营运有限公司 版权所有
 */

package com.xci.edu.core.dao;

import com.github.lvyanyang.annotation.Paging;
import com.xci.edu.core.entity.EduQuestion;
import com.xci.edu.core.entity.ExerciseQuestion;
import com.xci.edu.core.filter.EduQuestionFilter;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 试题库数据层
 * @author 马星俊 maxingjun@xci96716.com
 * @since 2020-11-25 10:03:01
 */
public interface EduQuestionDao {
    /**
     * 新建试题库
     * @param entity 试题库实体
     * @return 返回影响的行数
     */
    int insert(@Param("entity") EduQuestion entity);

    /**
     * 修改试题库
     * @param entity 试题库实体
     * @return 返回影响的行数
     */
    int update(@Param("entity") EduQuestion entity);

    /**
     * 根据主键修改试题库状态
     * @param id     试题库主键
     * @param status 试题库状态
     * @return 返回影响的行数
     */
    int updateStatus(@Param("id") Long id, @Param("status") Boolean status);

    /**
     * 根据主键删除试题库
     * @param id 试题库主键
     * @return 返回影响的行数
     */
    int deleteById(@Param("id") Long id);



    /**
     * 根据主键查询单个试题库
     * @param id 试题库主键
     * @return 返回试题库实体
     */
    EduQuestion selectById(@Param("id") Long id);

    /**
     * 按科目及试题类型查询试题库列表
     * @param eduCategoryId 科目主键
     * @param questionCategory 试题类型[1-单选题, 2-多选题, 3-判断题]
     * @return 返回试题库列表
     */
    List<EduQuestion> selectListByType(@Param("eduCategoryId") Long eduCategoryId,@Param("questionCategory") Integer questionCategory);
    /**
     * 按科目及试题类型查询试题库列表
     * @param studentId 科目主键
     * @param favoriteType 试题类型[1-单选题, 2-多选题, 3-判断题]
     * @return 返回试题库列表
     */
    List<EduQuestion> getQuestionsByStudentIdAndFavoriteType(@Param("studentId") Long studentId,@Param("favoriteType") int favoriteType);
     /**
     * 按顺序取习题
     * @return 返回试题库列表
     */
    List<ExerciseQuestion> getExerciseQuestions(@Param("eduCategoryId") Long eduCategoryId, @Param("questionCategory") Integer questionCategory);

    /**
     * 查询试题库列表
     * @param filter 过滤条件
     * @return 返回试题库列表
     */
    List<EduQuestion> selectList(@Param("filter") EduQuestionFilter filter);

    /**
     * 查询试题库分页列表
     * @param filter 过滤条件
     * @return 返回试题库分页列表
     */
    @Paging
    List<EduQuestion> selectPageList(@Param("filter") EduQuestionFilter filter);
}